import re

class VoiceCommandParser:
    @staticmethod
    def parse_command(text):
        """
        解析语音指令并清理命名空间名称
        """
        text = text.lower().strip()
        
        # 创建命名空间
        create_match = re.search(r'创建(一个)?(名为)?(.+?)的命名空间', text)
        if create_match:
            namespace = create_match.group(3).strip()
            # 清理命名空间名称
            namespace = VoiceCommandParser._clean_namespace_name(namespace)
            return {
                "action": "create_namespace",
                "namespace": namespace,
                "original_text": text
            }
        
        # 删除命名空间
        delete_match = re.search(r'删除(命名空间)?(.+)', text)
        if delete_match:
            namespace = delete_match.group(2).strip()
            namespace = VoiceCommandParser._clean_namespace_name(namespace)
            return {
                "action": "delete_namespace",
                "namespace": namespace,
                "original_text": text
            }
        
        # 获取特定命名空间
        get_match = re.search(r'(查看|获取)(命名空间)?(.+)', text)
        if get_match:
            namespace = get_match.group(3).strip()
            namespace = VoiceCommandParser._clean_namespace_name(namespace)
            return {
                "action": "get_namespace",
                "namespace": namespace,
                "original_text": text
            }
        
        # 列出所有命名空间
        if "所有命名空间" in text or "列出命名空间" in text:
            return {
                "action": "list_namespaces",
                "original_text": text
            }
        
        # 默认返回未知指令
        return {
            "action": "unknown",
            "original_text": text
        }
    
    @staticmethod
    def _clean_namespace_name(name):
        """清理命名空间名称"""
        # 转换为小写
        name = name.lower()
        # 替换空格和特殊字符
        name = re.sub(r'[^a-z0-9-]', '-', name)
        # 移除开头和结尾的连字符
        name = name.strip('-')
        # 限制长度
        if len(name) > 63:
            name = name[:63].rstrip('-')
        return name

# 全局实例
command_parser = VoiceCommandParser()